/*
 * PagFormularioValidar.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlAtividade;
import srac.controleatividades.cdp.AtividadeComplementar;
import srac.controleatividades.cdp.StatusAtividadeComplementar;
import srac.controleatividades.cdp.TipoAtividade;

public class PagFormularioValidar extends GenericForwardComposer {

    private CtrlAtividade ctrlAtividade = CtrlAtividade.getInstance();
    private Window winFormularioValidar;
    private Listbox listAtividades;
    private Div boxInformacao;
    private Label msg;
    private TipoAtividade obj;
    List<AtividadeComplementar> atividades;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        ctrlAtividade.setPagFormularioValidar(this);
        obj = (TipoAtividade) arg.get("obj");
        
        if (obj != null) {
            atividades = ctrlAtividade.obterAtividadesComplementaresValidacao(obj); //Obtem as atividades para validar do aluno (Rejeitadas, Aceitas, Em analise e Aceitas com modificacao)
            if (atividades != null) {

                for (int i = 0; i < atividades.size(); i++) {
                    AtividadeComplementar a = atividades.get(i);
                    Listitem linha = new Listitem(atividades.get(i).getAluno().getNome(), a);

                    linha.appendChild(new Listcell(atividades.get(i).getDescricao()));
                    if (atividades.get(i).getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.REJEITADA)) {
                    linha.appendChild(new Listcell("Recusada"));
                    } 
                    else if (atividades.get(i).getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.ACEITA)) {
                    linha.appendChild(new Listcell("Aceita"));
                    } 
                    else if (atividades.get(i).getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.EM_ANALISE)) {
                    linha.appendChild(new Listcell("Nao Validada"));
                    }
                    else if (atividades.get(i).getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.ACEITA_MODIFICADA)) {
                        linha.appendChild(new Listcell("Aceita Modificada"));
                    }
                    linha.appendChild(new Listcell(atividades.get(i).getCreditosRequeridos().toString()));

                    linha.appendChild(new Listcell(atividades.get(i).getCreditosObtidos().toString()));

                    linha.setParent(listAtividades);
                }
            }
        }
    }

    public void onCreate$winFormularioValidar() {
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winFormularioValidar.detach();
        }
    }

    public void onClick$aceitarAtividade(Event event) { //Aceita a atividade selecionada, tendo a opção de modifica-la se necessário
        Listitem listitem = listAtividades.getSelectedItem();
        if (listitem != null) {
            AtividadeComplementar a = listitem.getValue();
            ctrlAtividade.abrirFormularioValidarAtividade(a);
            refreshAtividade(a);
        }
    }

    public void onClick$rejeitarAtividade(Event event) {
        Listitem listitem = listAtividades.getSelectedItem();
        if (listitem != null) {
            AtividadeComplementar a = listitem.getValue();
            ctrlAtividade.registrarResultadoValidar(a, StatusAtividadeComplementar.REJEITADA); //Muda o status da atividade para rejeitada
            refreshAtividade(a);
        }
    }

    public void onClick$encerrar(Event event) {
        winFormularioValidar.onClose();
        ctrlAtividade.refreshValidar();
    }

    public void onClick$consultarAtividade(Event event) { //Consulta a atividade selecionada
        Listitem listitem = listAtividades.getSelectedItem();
        if (listitem != null) {
            AtividadeComplementar a = listitem.getValue();
            ctrlAtividade.abrirConsultarAtividadeComplementar(a);
        }
    }


    public void refreshAtividade(AtividadeComplementar a) {
        for (int i = 0; i < listAtividades.getItemCount(); i++) {
            if (listAtividades.getItemAtIndex(i).getValue() == a) {
                listAtividades.getItemAtIndex(i).getChildren().clear();
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(a.getAluno().getNome()));
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(a.getDescricao()));
                if (a.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.REJEITADA)) {
                    listAtividades.getItemAtIndex(i).appendChild(new Listcell("Recusada"));
                } else if (a.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.ACEITA)) {
                    listAtividades.getItemAtIndex(i).appendChild(new Listcell("Aceita"));
                } else if (a.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.EM_ANALISE)) {
                    listAtividades.getItemAtIndex(i).appendChild(new Listcell("Nao Validada"));
                }
                else if (a.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.ACEITA_MODIFICADA)) {
                    listAtividades.getItemAtIndex(i).appendChild(new Listcell("Aceita Modificada"));
                }
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(a.getCreditosRequeridos().toString()));
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(a.getCreditosObtidos().toString()));

                break;
            }
        }
    }
    
    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }
}
